package com.gopay.common.base.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;


/**
 * 
 * @BaseDAO.java
 * @author
 * @2012-12-21 下午2:13:45 www.gopay.com.cn Inc.All rights reserved.
 */
public interface BaseDAO<T extends Serializable, Pk extends Serializable> extends BaseReadDAO<T, Pk> {

    /**
     * 增加实体数据
     * 
     * @param entity
     */
    T save(T entity);

    /**
     * 批量新增、更新实体数据
     * @param entityList
     */
    void saveOrUpdateAll(Collection<T> entityList);
    
    /**
     * 删除实体数据
     * 
     * @param entity
     */
    void delete(T entity);

    /**
     * 删除结合对象
     * 
     * @param collection
     */
    void deleteAll(Collection<T> collection);

    /**
     * 修改实体数据
     * 
     * @param entity
     */
    void update(T entity);

   

    /**
     * 通过HQL删除
     * 
     * @param hql
     * @return
     */
    int deleteByHql(final String hql);

    /**
     * 通过HQL更新
     * 
     * @param hql
     * @return
     */
    int updateByHql(final String hql);

    int updateByHql(final String hql, final Map<String, Object> param);

    /**
     * 通过sql更新
     * 
     * @param sql
     * @param param
     * @return
     */
    public int updateBySql(final String sql, final Map<String, Object> param);
    
    /**
     * 合并实体数据
     * 
     * @param entity
     */
    T merge(T entity);

}
